home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / asm / Asm_Course2.lha / Teil17.TXT < prev    next >
Text File  |  1992-09-02  |  13KB  |  355 lines

  1.           A S S E M B L E R - K U R S       (c)  Jeff Kandle 1990
  2.  
  3.                                 17.Teil...
  4.  
  5. So, bevor wir weiter machen, will ich mal eine kurze Listre durchgeben, in
  6. der alle befehle des MC 68000 mit UltraKurzbeschreibung sind. Die
  7. Kompletten listen kommen allerdings erst am Ende. Ich bringe diese Listen
  8. auch nur weil es sich so gehoert fuer einen Kurs.
  9.  
  10. Also pack mers...
  11.  
  12. ABCD    Addition von BCD-Zahlen
  13. ADD     Binaere Addition zweier Operanden zwischen 8 und 32 Bit
  14. ADDA    Addition eines Operanden zu einem Adressregister als Ziel
  15. ADDI    Binaere Adition mit Konstanten
  16. ADDQ    Addition eines 3-Bit-Operanden zu einem Register oder
  17.         Speicherbereich
  18. ADDX    Addition zweier Operanden mit Extend-Flag
  19. AND     Logische UND-Verknuepfung zweier Operanden
  20. ANDI    Logische UND-Verknuepfung unmittelbarer Daten
  21. ASL     Arithmetische Verschiebung nach Links
  22. ASR     Arithmetische Verschiebung nach Rechts
  23. BCC     Bedingter relativer Sprung
  24. BHI     Bedingter relativer Sprung
  25. BLS     Bedingter relativer Sprung
  26. BCS     Bedingter relativer Sprung
  27. BNE     Bedingter relativer Sprung
  28. BEQ     Bedingter relativer Sprung
  29. BVC     Bedingter relativer Sprung
  30. BVS     Bedingter relativer Sprung
  31. BPL     Bedingter relativer Sprung
  32. BMI     Bedingter relativer Sprung
  33. BGE     Bedingter relativer Sprung
  34. BLT     Bedingter relativer Sprung
  35. BGT     Bedingter relativer Sprung
  36. BLE     Bedingter relativer Sprung
  37. BCHG    Bit pruefen und aendern
  38. BCLR    Bit pruefen und auf Null setzen
  39. BRA     Verzweige immer (Branchen)
  40. BSET    Bit pruefen und auf Eins setzen
  41. BSR     Verzweige zu Unterprogramm (Branchen)
  42. BTST    Bit pruefen
  43. CHK     Inhalt eines Datenregisters gegen eine obere und untere Grenze
  44.         Pruefen
  45. CLR     Inhalt eines Operanden loeschen
  46. CMP     Vergleich zweier Operanden
  47. CMPA    Vergleich eines Adressregisters mit einem Operanden
  48. CMPI    Vergleich einer Konstanten mit dem Zieloperanden
  49. CMPM    Vergleich zweier Speicherzellen
  50. DBCC    Bedingung pruefen, dekrementieren und verzweigen  C=0
  51. DBCS    Bedingung pruefen, dekrementieren und verzweigen  C=1
  52. DBEQ    Bedingung pruefen, dekrementieren und verzweigen  Z=1
  53. DBF     Bedingung pruefen, dekrementieren und verzweigen  nie erfuellt
  54. DBGE    Bedingung pruefen, dekrementieren und verzweigen  >=
  55. DBGT    Bedingung pruefen, dekrementieren und verzweigen  >
  56. DBHI    Bedingung pruefen, dekrementieren und verzweigen  Hoeher
  57. DBLE    Bedingung pruefen, dekrementieren und verzweigen  <=
  58. DBLS    Bedingung pruefen, dekrementieren und verzweigen  niedriger =
  59. DBLT    Bedingung pruefen, dekrementieren und verzweigen  <
  60. DBMI    Bedingung pruefen, dekrementieren und verzweigen  N=1
  61. DBNE    Bedingung pruefen, dekrementieren und verzweigen  Z=0
  62. DBPL    Bedingung pruefen, dekrementieren und verzweigen  N=0
  63. DBT     Bedingung pruefen, dekrementieren und verzweigen  immer erfuellt
  64. DBVC    Bedingung pruefen, dekrementieren und verzweigen  V=0
  65. DBVS    Bedingung pruefen, dekrementieren und verzweigen  V=1
  66. DIVS    Division mit Vorzeichen
  67. DIVU    Division ohne Vorzeichen
  68. EOR     Logisch Exklusiv-Oder
  69. EORI    Logische Exklusiv-Oder mit einer Konstanten
  70. EXG     Registerinhalte vertauschen
  71. EXT     Vorzeichenrichtige Erweiterung eines Datenregisters
  72. JMP     Unbedingter absoluter Sprung
  73. JSR     In ein Unterprogramm springen
  74. LEA     Effektive Adresse in ein Adressregister laden
  75. LINK    Stackpointer retten und einen neuen Stackbereich anlegen
  76. LSL     Logische Verschiebung nach links
  77. LSR     Logische Verschiebung nach rechts
  78. MOVE    Daten von Quelle zum Ziel uebertragen
  79. MOVE to CCR     Uebertragen von Daten in das CC-Register
  80. MOVE to SR      Uebertragen von Daten in das SR-Register
  81. MOVE from SR    Den Inhalt des Statusregisters in einen Zieloperanden
  82.                 uebertragen
  83. MOVE USP        Manipulieren des User-Stackpointers
  84. MOVEA   Daten in ein Adressregister uebertragen
  85. MOVEM   Mehrere Register uebertragen
  86. MOVEP   Datentransfer zwischen CPU und Peripheriegeraeten
  87. MOVEQ   Uebertraegt eine Konstante schnell in ein Datenregister
  88. MULS    Multiplikation mit Vorzeichen
  89. MULU    Multiplikation ohne Vorzeichen
  90. NBCD    Negation von BCD-Zahlen
  91. NEG     Negieren eines Operanden
  92. NEGX    Negation mit Extend
  93. NOP     Keine Operation
  94. NOT     Invertieren eines Operanden
  95. OR      Logische ODER-Verknuepfung
  96. ORI     Logische ODER-Verknuepfung mit einer Konstanten
  97. PEA     Ablegen einer effektiven Adresse auf den Stack
  98. RESET   Ruecksetzen externer Einheiten
  99. ROL     Rotieren eines Operanden nach links
  100. ROR     Rotieren eines Operanden nach rechts
  101. ROXL    Rotieren eines Operanden nach links mit Extend
  102. ROXR    Rotieren eines Operanden nach rechts mit Extend
  103. RTE     Ruecksprung von Eception
  104. RTR     Ruecksprung mit Laden der Flags
  105. RTS     Ruecksprung vom Unterprogramm
  106. SBCD    Subtraktion von BCD-Zahlen
  107. ST      Testen einer Bedingung  1
  108. SF      Testen einer Bedingung  0
  109. SHI     Testen einer Bedingung  (C or Z)=0
  110. SLS     Testen einer Bedingung  (C or Z)=1
  111. SCC     Testen einer Bedingung  C=0
  112. SCS     Testen einer Bedingung  C=1
  113. SNE     Testen einer Bedingung  Z=0
  114. SEQ     Testen einer Bedingung  Z=1
  115. SVC     Testen einer Bedingung  V=0
  116. SVS     Testen einer Bedingung  V=1
  117. SPL     Testen einer Bedingung  N=0
  118. SMI     Testen einer Bedingung  N=1
  119. SGE     Testen einer Bedingung  N eor V=0
  120. SLT     Testen einer Bedingung  N eor V=1
  121. SGT     Testen einer Bedingung  Z and (N eor V)=0
  122. SLE     Testen einer Bedingung  Z or (N eor V)=1
  123. STOP    Prozessor anhalten
  124. SUB     Subtraktion zweier Operanden
  125. SUBA    Subtraktion mit Adressregister als Ziel
  126. SUBI    Subtraktion mit Konstanten als Quelloperand
  127. SUBQ    Subtraktion eines 3-Bit-Operanden
  128. SUBX    Subtraktion zweier Operanden mit Etend
  129. SWAP    Austauschen zweier Registerhaelften
  130. TAS     Bit im Zieloperanden pruefen und setzen
  131. TRAP    Bit im Zieloperanden pruefen und setzen
  132. TRAPV   Trap bei Overflow
  133. TST     Operanden testen
  134. UNLK    Stackpointer zurueckholen
  135.  
  136. So das waren sie...
  137. Wenn man bedenkt das die Befehle im Durchnitt auch noch 6-7
  138. Adressierungsarten beherrschen, und wir sie im Byte, Word und
  139. Langwordbereich einsetzen koennen, dann kann man sich gut vorstellen wieviel
  140. verschiedene schalter vom Prozessor erkannt und verarbeitet werden muessen
  141. damit er ueberhaupt weiss was das fuer ein Befehl ist. Wenn man dann noch
  142. daran denkt das er die instruktion dann auch noch ausfuehrt, dann weiss man
  143. wie schnell er wirklich ist.
  144.  
  145.  
  146. Naja, wem die Vielfalt an Befehlen gefaellt, und wer gerne alle einsetzen
  147. moechte dem sei gesagt, das es fast unmoeglich ist alle befehle
  148. einzusetzen. Denn man soll ja Programme mit Befehlen schreiben, und nicht
  149. die Programme so schreiben das man die Befehle brauchen kann. Denn dann
  150. programmiert man umstaendlich. Es ist zwar schoen das, wenn man etwas
  151. programmiert, man ein bisherige schreibweise durch die kenntnis eines Neuen
  152. befehls erleichtern, verschnellern oder verkuerzen kann. Aber man soll sich
  153. nicht zwingen neue tolle befehle unbedingt zu benutzen, denn das ist
  154. oftmals dann schlimmer als wie es nutzen hat.
  155.  
  156. So, wem die Kurzbeschreibungen nicht reichen, weil er doch lieber
  157. Profisionell arbeiten moechte, der muss leider bis ende des Kurses warten,
  158. weil ich dann erst die kompletten Befehlslisten hier reinsetze. Das hat
  159. nichts damit zutun das ich die Leute dabei halten will, nur etwas damit das
  160. es sehr viel arbeit ist, und ich das noch nebenbei mache, ausserdem
  161. Schreibe ich noch an einem neuen demo, und bin mir auch schon die Sachen
  162. fuer das Intro das am Ende diese Kurses steht am zusammen am Bauen, wie wir
  163. Koelsche sagen.
  164. Da seht ihr mal wieviel Zeit dabei drauf geht, und nebenbei mache ich
  165. noch eine Lehre, und habe dort in Fuenf Monaten Facharbeiter Pruefung. Also
  166. ich riskiere fuer euch Kopf und Kragen.
  167.  
  168. Nun das reicht erstmal...Weiter mit dem programmieren, und den hilfen.
  169.  
  170. Dieser Tips kommt zwar etwas Spaet, aber immerhin..er kommt.
  171. Waehrend ihr diesen Kurs mitmacht solltet ihr alles SourceCodemaessige was
  172. ihr in die Finger kriegt, so bearbeiten und Analysieren das ihr genau wisst
  173. was es macht. Ihr solltet auch ganz alleine Listings von mir
  174. nachprogrammieren. Wenn es dann nicht klappt koennt ihr ja immer noch
  175. nachgucken was falsch war. Aber das naechste mal passiert das nicht mehr,
  176. so war es jedenfalls bei mir, und ich habe werweisswieviel Falsch gemacht.
  177.  
  178. Ueberhaupt solltet ihr alle moeglichen SourceCodes sammeln, und immer
  179. wieder angucken und laufen lassen, denn aus der Puren Theorie lernt man
  180. nicht besonders gut. Denn auch die erfahrensten bauen immer mal wieder
  181. einen Guru, da ist nicht Schlimmes dran, ehrlich.
  182.  
  183. Fuer alle die sich noch eingehende mit dem IFF Format und dessen
  184. konvertierung befassen wollen habe ich hier noch ein Listing eines
  185. Konverters, es hat mir sehr geholfen, und ich habe anhan dessen schon einen
  186. kleinen IFF Konverter zusammengeschrieben. Vielleicht koennt ihr den ja
  187. schon bald bewundern.
  188.  
  189. ; Iff-Decrunch-Routine
  190.  
  191. Dateilaenge = 4666
  192.  
  193. >Extern "test.iff",Quelle,Dateilaenge
  194.  
  195. Execbase = 4
  196. Allocmem = -$c6
  197. Freemem = -$d2
  198.  
  199. ; Makros
  200.  
  201. FINDCHUNK        MACRO
  202.  
  203. Fc?0:
  204.         cmp.l   #?1,(a0)                  ; ist parameter gefunden ?
  205.         nop
  206.         adda.l  #2,a0                    ; adda veraendert keine Flags
  207.         beq     fc1?0                       ; ja
  208.         dbra    d0,fc?0                    ; nein weiter
  209.         sub.l   d0,d0                     ; nicht gefunden Chunk laenge
  210.         bra.s   fc2?0
  211. fc1?0:
  212.         adda.l  #2,a0
  213.         move.l  (a0)+,d0
  214. fc2?0:
  215.                 ENDM
  216.  
  217.  
  218. ; Programm
  219.  
  220. Start:
  221.         lea.l   quelle,a0
  222.         move.l  #dateilaenge\2-1,d0
  223.         FINDCHUNK "FORM"
  224.         beq     stop
  225.         cmp.l   #"ILBM",(a0)
  226.         bne     stop
  227.         FINDCHUNK "BMHD"
  228.         move.b  10(a0),d0
  229.         cmp.b   #1,d0
  230.         bhi     stop
  231.         move.l  a0,bmhdptr
  232.         move.w  (a0),breite
  233.         move.w  2(a0),hoehe
  234.         move.b  8(a0),tiefe
  235.         move.l  Execbase,a6
  236.         sub.l   d0,d0
  237.         move.w  breite,d0
  238.         add.w   #15,d0
  239.         asr.w   #3,d0
  240.         andi.w  #$fffe,d0
  241.         mulu    hoehe,d0
  242.         sub.l   d1,d1
  243.         move.b  tiefe,d1
  244.         mulu    d1,d0
  245.         move.l  d0,bodysize
  246.         moveq   #1,d2
  247.         asl.l   d2,d1
  248.         asl.l   #1,d2
  249.         add.l   d2,d0
  250.         move.l  d0,filesize
  251.         move.l  #$10003,d1
  252.         jsr     allocmem(a6)
  253.         move.l  d0,outfile
  254.         beq     stop
  255.         lea     quelle,a0
  256.         move.l  #dateilaenge-1,d0
  257.         FINDCHUNK "CMAP"
  258.         beq     nocmap
  259.         move.l  outfile,a1
  260.         add.l   bodysize,a1
  261.         move.l a1,colormap
  262. CMLOOP:
  263.         sub.w   d1,d1
  264.         move.b  (a0)+,d1
  265.         lsl.w   #4,d1
  266.         andi.w  #$0f00,d1
  267.         move.b  (a0)+,d2
  268.         andi.w  #$00f0,d2
  269.         ori.w   d2,d1
  270.         move.b  (a0)+,d2
  271.         andi.w  #$000f,d2
  272.         ori.w   d2,d1
  273.         move.w  d1,(a1)+
  274.         sub.l   #3,d0
  275.         bgt     cmloop
  276. nocmap:
  277.         lea     quelle,a0
  278.         move.l  #dateilaenge-1,d0
  279.         FINDCHUNK "BODY"
  280.         beq     stop
  281.         subq.l  #1,d0
  282.         move.l  bmhdptr,a1
  283.         move.b  10(a1),d1
  284.         move.l  outfile,a1
  285.         beq copy
  286. Dekompress:
  287.         clr.w   d1
  288.         move.b  (a0)+,d1
  289.         cmp.b   #128,d1
  290.         beq     noop
  291.         bhi     double
  292. copybytes:
  293.         move.b  (a0)+,(a1)+
  294.         dbra    d1,copybytes
  295.         bra.s   noop
  296. double:
  297.         neq.b   d1
  298.         move.b  (a0)+,d2
  299. doubleloop:
  300.         move.w  #$000f,$dff180
  301.         move.b  d2,(a1)+
  302.         dbra    d1,doubleloop
  303. noop:
  304.         dbra    d0,dekompress
  305.         bra.s   stop
  306. copy:
  307.         move.w  #$00f0,$dff180
  308.         move.b  (a0)+,(a1)+
  309.         dbra    d0,copy
  310. stop:
  311.         sub.l   d0,d0
  312.         sub.l   d1,d1
  313.         sub.l   d2,d2
  314.         sub.l   d3,d3
  315.         move.w  breite,d0
  316.         move.w  hoehe,d1
  317.         move.b  tiefe,d2
  318.         move.l  outfile,a0
  319.         move.l  filesize,a1
  320.         adda.l  a0,a1
  321. ILLEGAL
  322.  
  323. clean:
  324.         move.l  execbase,a6
  325.         move.l  filesize,d0
  326.         move.l  outfile,a1
  327.         jsr     freemem(a6)
  328. ILLEGAL
  329.  
  330.  
  331. BMHDptr:        dc.l 0
  332. bodysize:       dc.l 0
  333. colormap:       dc.l 0
  334. outfile:        dc.l 0
  335. filesize:       dc.l 0
  336. breite:         dc.w 0
  337. hoehe:          dc.w 0
  338. tiefe:          dc.b 0
  339. even
  340. Quelle:         blk.b dateilaenge,0
  341. Quelle1:
  342.  
  343. Wie gesagt, ich habe sie abgetippt, aus dem Copperkurs der Amiga.
  344. (Ich muss das dabeischreiben, wegen dem Copyrights und so)
  345. Wundert euch also nicht ueber den Programmierstil.
  346.  
  347. Da ihr aber jetzt, wenigstens von Sinn her viele Befehle kennt, dann
  348. koenntet ihr euch ja mal an das Konverterlisting setzen und es
  349. Anaylisieren.
  350. Viel Spass dabei....
  351.  
  352. See you...
  353.  
  354.                 Jeff Kandle
  355.